package haggisworld;

import java.io.Serializable;
import java.util.LinkedList;
import java.util.Collections;
import javax.swing.ImageIcon;

/**
 * In dieser Klasse werden alle Karten erstellt. Das heisst, jede Karte bekommt
 * einen Datenpfad(wo sich das dazugehörige jpg befindet) jede Karte bekommt
 * einen Rang,Farbe und Punktewert.
 *
 * @author Benjamin Loosli
 * @return alle Karten werden zurückgeben mit einem Bild, Wert, Punktestand
 */
public class KartenEigenschaften implements Serializable {

	// Hier werden den Kartenpfad eingegeben
    // Gelbe Karten
    public ImageIcon gelb2 = new ImageIcon("../res/gelb/gelb02.jpg");
    public ImageIcon gelb3 = new ImageIcon("../res/gelb/gelb03.jpg");
    public ImageIcon gelb4 = new ImageIcon("../res/gelb/gelb04.jpg");
    public ImageIcon gelb5 = new ImageIcon("../res/gelb/gelb05.jpg");
    public ImageIcon gelb6 = new ImageIcon("../res/gelb/gelb06.jpg");
    public ImageIcon gelb7 = new ImageIcon("../res/gelb/gelb07.jpg");
    public ImageIcon gelb8 = new ImageIcon("../res/gelb/gelb08.jpg");
    public ImageIcon gelb9 = new ImageIcon("../res/gelb/gelb09.jpg");
    public ImageIcon gelb10 = new ImageIcon("../res/gelb/gelb010.jpg");

    // Grüne Karten
    public ImageIcon gruen2 = new ImageIcon("../res/gruen/gruen02.jpg");
    public ImageIcon gruen3 = new ImageIcon("../res/gruen/gruen03.jpg");
    public ImageIcon gruen4 = new ImageIcon("../res/gruen/gruen04.jpg");
    public ImageIcon gruen5 = new ImageIcon("../res/gruen/gruen05.jpg");
    public ImageIcon gruen6 = new ImageIcon("../res/gruen/gruen06.jpg");
    public ImageIcon gruen7 = new ImageIcon("../res/gruen/gruen07.jpg");
    public ImageIcon gruen8 = new ImageIcon("../res/gruen/gruen08.jpg");
    public ImageIcon gruen9 = new ImageIcon("../res/gruen/gruen09.jpg");
    public ImageIcon gruen10 = new ImageIcon("../res/gruen/gruen010.jpg");

    // Orange Karten
    public ImageIcon orange2 = new ImageIcon("../res/orange/orange02.jpg");
    public ImageIcon orange3 = new ImageIcon("../res/orange/orange03.jpg");
    public ImageIcon orange4 = new ImageIcon("../res/orange/orange04.jpg");
    public ImageIcon orange5 = new ImageIcon("../res/orange/orange05.jpg");
    public ImageIcon orange6 = new ImageIcon("../res/orange/orange06.jpg");
    public ImageIcon orange7 = new ImageIcon("../res/orange/orange07.jpg");
    public ImageIcon orange8 = new ImageIcon("../res/orange/orange08.jpg");
    public ImageIcon orange9 = new ImageIcon("../res/orange/orange09.jpg");
    public ImageIcon orange10 = new ImageIcon("../res/orange/orange010.jpg");

    // Rote Karte
    public ImageIcon rot2 = new ImageIcon("../res/rot/rot02.jpg");
    public ImageIcon rot3 = new ImageIcon("../res/rot/rot03.jpg");
    public ImageIcon rot4 = new ImageIcon("../res/rot/rot04.jpg");
    public ImageIcon rot5 = new ImageIcon("../res/rot/rot05.jpg");
    public ImageIcon rot6 = new ImageIcon("../res/rot/rot06.jpg");
    public ImageIcon rot7 = new ImageIcon("../res/rot/rot07.jpg");
    public ImageIcon rot8 = new ImageIcon("../res/rot/rot08.jpg");
    public ImageIcon rot9 = new ImageIcon("../res/rot/rot09.jpg");
    public ImageIcon rot10 = new ImageIcon("../res/rot/rot010.jpg");

    public ImageIcon bube = new ImageIcon("../res/andere/Bube.jpg");
    public ImageIcon dame = new ImageIcon("../res/andere/Dame.jpg");
    public ImageIcon koenig = new ImageIcon("../res/andere/Koenig.jpg");

    private Karte gelb02, gelb03, gelb04, gelb05, gelb06, gelb07, gelb08,
            gelb09, gelb010;
    private Karte gruen02, gruen03, gruen04, gruen05, gruen06, gruen07,
            gruen08, gruen09, gruen010;
    private Karte orange02, orange03, orange04, orange05, orange06, orange07,
            orange08, orange09, orange010;
    private Karte rot02, rot03, rot04, rot05, rot06, rot07, rot08, rot09,
            rot010;

    public Karte bube01, dame01, koenig01, bube02, dame02, koenig02;

    public LinkedList<Karte> standardKarten = new LinkedList<Karte>();
    public LinkedList<Karte> bonusKarten = new LinkedList<Karte>();

    public void erstelleDeckHandkarten() {
		// 1. Punkt "Name", 2.Punkt "Farbe", 3.Punkt "Rang", 4.Punkt "Punkte"

        // Gelbe Karten definieren, Wert zuweisen
        gelb02 = new Karte("Gelb02", "Gelb", 2, 0);
        gelb03 = new Karte("Gelb03", "Gelb", 3, 1);
        gelb04 = new Karte("Gelb04", "Gelb", 4, 0);
        gelb05 = new Karte("Gelb05", "Gelb", 5, 1);
        gelb06 = new Karte("Gelb06", "Gelb", 6, 0);
        gelb07 = new Karte("Gelb07", "Gelb", 7, 1);
        gelb08 = new Karte("Gelb08", "Gelb", 8, 0);
        gelb09 = new Karte("Gelb09", "Gelb", 9, 1);
        gelb010 = new Karte("Gelb10", "Gelb", 10, 0);

        // Grüne Karten definieren, Wert zuweisen
        gruen02 = new Karte("Gruen02", "Gruen", 2, 0);
        gruen03 = new Karte("Gruen03", "Gruen", 3, 1);
        gruen04 = new Karte("Gruen04", "Gruen", 4, 0);
        gruen05 = new Karte("Gruen05", "Gruen", 5, 1);
        gruen06 = new Karte("Gruen06", "Gruen", 6, 0);
        gruen07 = new Karte("Gruen07", "Gruen", 7, 1);
        gruen08 = new Karte("Gruen08", "Gruen", 8, 0);
        gruen09 = new Karte("Gruen09", "Gruen", 9, 1);
        gruen010 = new Karte("Gruen10", "Gruen", 10, 0);

        // Orange Karten definieren, Wert zuweisen
        orange02 = new Karte("Orange02", "Orange", 2, 0);
        orange03 = new Karte("Orange03", "Orange", 3, 1);
        orange04 = new Karte("Orange04", "Orange", 4, 0);
        orange05 = new Karte("Orange05", "Orange", 5, 1);
        orange06 = new Karte("Orange06", "Orange", 6, 0);
        orange07 = new Karte("Orange07", "Orange", 7, 1);
        orange08 = new Karte("Orange08", "Orange", 8, 0);
        orange09 = new Karte("Orange09", "Orange", 9, 1);
        orange010 = new Karte("Orange10", "Orange", 10, 0);

        // Rote Karten definieren, Wert zuweisen
        rot02 = new Karte("Rot02", "Rot", 2, 0);
        rot03 = new Karte("Rot03", "Rot", 3, 1);
        rot04 = new Karte("Rot04", "Rot", 4, 0);
        rot05 = new Karte("Rot05", "Rot", 5, 1);
        rot06 = new Karte("Rot06", "Rot", 6, 0);
        rot07 = new Karte("Rot07", "Rot", 7, 1);
        rot08 = new Karte("Rot08", "Rot", 8, 0);
        rot09 = new Karte("Rot09", "Rot", 9, 1);
        rot010 = new Karte("Rot10", "Rot", 10, 0);

        // Gelbe Karten zu LinkedList hinzufügen
        standardKarten.add(gelb02);
        standardKarten.add(gelb03);
        standardKarten.add(gelb04);
        standardKarten.add(gelb05);
        standardKarten.add(gelb06);
        standardKarten.add(gelb07);
        standardKarten.add(gelb08);
        standardKarten.add(gelb09);
        standardKarten.add(gelb010);

        // Grüne Karten zu LinkedList hinzufügen
        standardKarten.add(gruen02);
        standardKarten.add(gruen03);
        standardKarten.add(gruen04);
        standardKarten.add(gruen05);
        standardKarten.add(gruen06);
        standardKarten.add(gruen07);
        standardKarten.add(gruen08);
        standardKarten.add(gruen09);
        standardKarten.add(gruen010);

        // Orange Karten zu LinkedList hinzufügen
        standardKarten.add(orange02);
        standardKarten.add(orange03);
        standardKarten.add(orange04);
        standardKarten.add(orange05);
        standardKarten.add(orange06);
        standardKarten.add(orange07);
        standardKarten.add(orange08);
        standardKarten.add(orange09);
        standardKarten.add(orange010);

        // Rote Karten zu LinkedList hinzufügen
        standardKarten.add(rot02);
        standardKarten.add(rot03);
        standardKarten.add(rot04);
        standardKarten.add(rot05);
        standardKarten.add(rot06);
        standardKarten.add(rot07);
        standardKarten.add(rot08);
        standardKarten.add(rot09);
        standardKarten.add(rot010);

        System.out.println(standardKarten);
    }

    public LinkedList<Karte> getStandardKarten() {
        return this.standardKarten;
    }

    public LinkedList<Karte> getBonusKarten() {
        return this.bonusKarten;
    }

    public void erstelleJokerKarten() {
		// Wert der Jokerkarten wurden auf 2,3,5 gesetzt (Punkte gemäss
        // Spielregeln)
        bube01 = new Karte("Bube", "Bonus", 11, 2);
        dame01 = new Karte("Dame", "Bonus", 12, 3);
        koenig01 = new Karte("Koenig", "Bonus", 13, 5);
        bube02 = new Karte("Bube", "Bonus", 11, 2);
        dame02 = new Karte("Dame", "Bonus", 12, 3);
        koenig02 = new Karte("Koenig", "Bonus", 13, 5);

        bonusKarten.add(bube01);
        bonusKarten.add(dame01);
        bonusKarten.add(koenig01);
        bonusKarten.add(bube01);
        bonusKarten.add(dame01);
        bonusKarten.add(koenig01);
    }

    public void mischeDeck() {
        Collections.shuffle(standardKarten);

    }

    public static void main(String[] args) {

    }

    public KartenEigenschaften() {
        erstelleDeckHandkarten();
        mischeDeck();
        erstelleJokerKarten();
    }
}
